/*
 *
 *    Copyright (c) 2021 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP

// Prevent multiple inclusion
#pragma once

#include "enums.h"
#include <app/util/basic-types.h>
#include <stdint.h>
#include <support/Span.h>

// Struct for ApplicationLauncherApp
typedef struct _ApplicationLauncherApp
{
    uint16_t catalogVendorId;
    uint8_t * applicationId;
} EmberAfApplicationLauncherApp;

// Struct for AudioOutputInfo
typedef struct _AudioOutputInfo
{
    uint8_t index;
    uint8_t outputType;
    chip::ByteSpan name;
} EmberAfAudioOutputInfo;

// Struct for BasicCommissioningInfoType
typedef struct _BasicCommissioningInfoType
{
    uint32_t FailSafeExpiryLengthMs;
} EmberAfBasicCommissioningInfoType;

// Struct for ConfigureReportingRecord
typedef struct _ConfigureReportingRecord
{
    uint8_t direction;
    chip::AttributeId attributeId;
    uint8_t attributeType;
    uint16_t minimumReportingInterval;
    uint16_t maximumReportingInterval;
    uint8_t * reportableChangeLocation;
    uint16_t timeoutPeriod;
} EmberAfConfigureReportingRecord;

// Struct for ConfigureReportingStatusRecord
typedef struct _ConfigureReportingStatusRecord
{
    uint8_t status;
    uint8_t direction;
    chip::AttributeId attributeId;
} EmberAfConfigureReportingStatusRecord;

// Struct for ContentLaunchAdditionalInfo
typedef struct _ContentLaunchAdditionalInfo
{
    uint8_t * name;
    uint8_t * value;
} EmberAfContentLaunchAdditionalInfo;

// Struct for ContentLaunchBrandingInformation
typedef struct _ContentLaunchBrandingInformation
{
    uint8_t * providerName;
    uint8_t background;
    uint8_t logo;
    uint8_t progressBar;
    uint8_t splash;
    uint8_t waterMark;
} EmberAfContentLaunchBrandingInformation;

// Struct for ContentLaunchDimension
typedef struct _ContentLaunchDimension
{
    uint8_t * width;
    uint8_t * height;
    uint8_t metric;
} EmberAfContentLaunchDimension;

// Struct for ContentLaunchParamater
typedef struct _ContentLaunchParamater
{
    uint8_t Type;
    uint8_t * Value;
    /* TYPE WARNING: array array defaults to */ uint8_t * ExternalIDList;
} EmberAfContentLaunchParamater;

// Struct for ContentLaunchStyleInformation
typedef struct _ContentLaunchStyleInformation
{
    uint8_t * imageUrl;
    uint8_t * color;
    uint8_t size;
} EmberAfContentLaunchStyleInformation;

// Struct for DeviceType
typedef struct _DeviceType
{
    chip::DeviceTypeId type;
    uint16_t revision;
} EmberAfDeviceType;

// Struct for DiscoverAttributesInfoRecord
typedef struct _DiscoverAttributesInfoRecord
{
    chip::AttributeId attributeId;
    uint8_t attributeType;
} EmberAfDiscoverAttributesInfoRecord;

// Struct for ExtendedDiscoverAttributesInfoRecord
typedef struct _ExtendedDiscoverAttributesInfoRecord
{
    chip::AttributeId attributeId;
    uint8_t attributeType;
    uint8_t attributeAccessControl;
} EmberAfExtendedDiscoverAttributesInfoRecord;

// Struct for FabricDescriptor
typedef struct _FabricDescriptor
{
    chip::FabricId FabricId;
    uint16_t VendorId;
    chip::NodeId NodeId;
    chip::ByteSpan Label;
} EmberAfFabricDescriptor;

// Struct for GroupKey
typedef struct _GroupKey
{
    uint16_t VendorId;
    uint16_t GroupKeyIndex;
    chip::ByteSpan GroupKeyRoot;
    uint64_t GroupKeyEpochStartTime;
    uint8_t GroupKeySecurityPolicy;
} EmberAfGroupKey;

// Struct for GroupState
typedef struct _GroupState
{
    uint16_t VendorId;
    uint16_t VendorGroupId;
    uint16_t GroupKeySetIndex;
} EmberAfGroupState;

// Struct for IasAceZoneStatusResult
typedef struct _IasAceZoneStatusResult
{
    uint8_t zoneId;
    uint16_t zoneStatus;
} EmberAfIasAceZoneStatusResult;

// Struct for LabelStruct
typedef struct _LabelStruct
{
    chip::ByteSpan label;
    chip::ByteSpan value;
} EmberAfLabelStruct;

// Struct for MediaInputInfo
typedef struct _MediaInputInfo
{
    uint8_t index;
    uint8_t inputType;
    chip::ByteSpan name;
    chip::ByteSpan description;
} EmberAfMediaInputInfo;

// Struct for MediaPlaybackPosition
typedef struct _MediaPlaybackPosition
{
    uint64_t updatedAt;
    uint64_t position;
} EmberAfMediaPlaybackPosition;

// Struct for NavigateTargetTargetInfo
typedef struct _NavigateTargetTargetInfo
{
    uint8_t identifier;
    chip::ByteSpan name;
} EmberAfNavigateTargetTargetInfo;

// Struct for NeighborTable
typedef struct _NeighborTable
{
    uint64_t ExtAddress;
    uint32_t Age;
    uint16_t Rloc16;
    uint32_t LinkFrameCounter;
    uint32_t MleFrameCounter;
    uint8_t LQI;
    int8_t AverageRssi;
    int8_t LastRssi;
    uint8_t FrameErrorRate;
    uint8_t MessageErrorRate;
    uint8_t RxOnWhenIdle;
    uint8_t FullThreadDevice;
    uint8_t FullNetworkData;
    uint8_t IsChild;
} EmberAfNeighborTable;

// Struct for NetworkInterfaceType
typedef struct _NetworkInterfaceType
{
    chip::ByteSpan Name;
    uint8_t FabricConnected;
    uint8_t OffPremiseServicesReachableIPv4;
    uint8_t OffPremiseServicesReachableIPv6;
    chip::ByteSpan HardwareAddress;
    uint8_t Type;
} EmberAfNetworkInterfaceType;

// Struct for Notification
typedef struct _Notification
{
    uint16_t contentId;
    uint8_t statusFeedback;
} EmberAfNotification;

// Struct for OperationalDatasetComponents
typedef struct _OperationalDatasetComponents
{
    uint8_t ActiveTimestampPresent;
    uint8_t PendingTimestampPresent;
    uint8_t MasterKeyPresent;
    uint8_t NetworkNamePresent;
    uint8_t ExtendedPanIdPresent;
    uint8_t MeshLocalPrefixPresent;
    uint8_t DelayPresent;
    uint8_t PanIdPresent;
    uint8_t ChannelPresent;
    uint8_t PskcPresent;
    uint8_t SecurityPolicyPresent;
    uint8_t ChannelMaskPresent;
} EmberAfOperationalDatasetComponents;

// Struct for PowerProfileRecord
typedef struct _PowerProfileRecord
{
    uint8_t powerProfileId;
    uint8_t energyPhaseId;
    uint8_t powerProfileRemoteControl;
    uint8_t powerProfileState;
} EmberAfPowerProfileRecord;

// Struct for ReadAttributeStatusRecord
typedef struct _ReadAttributeStatusRecord
{
    chip::AttributeId attributeId;
    uint8_t status;
    uint8_t attributeType;
    uint8_t * attributeLocation;
} EmberAfReadAttributeStatusRecord;

// Struct for ReadReportingConfigurationAttributeRecord
typedef struct _ReadReportingConfigurationAttributeRecord
{
    uint8_t direction;
    chip::AttributeId attributeId;
} EmberAfReadReportingConfigurationAttributeRecord;

// Struct for ReadReportingConfigurationRecord
typedef struct _ReadReportingConfigurationRecord
{
    uint8_t status;
    uint8_t direction;
    chip::AttributeId attributeId;
    uint8_t attributeType;
    uint16_t minimumReportingInterval;
    uint16_t maximumReportingInterval;
    uint8_t * reportableChangeLocation;
    uint16_t timeoutPeriod;
} EmberAfReadReportingConfigurationRecord;

// Struct for ReadStructuredAttributeRecord
typedef struct _ReadStructuredAttributeRecord
{
    chip::AttributeId attributeId;
    uint8_t indicator;
    uint16_t indicies;
} EmberAfReadStructuredAttributeRecord;

// Struct for ReportAttributeRecord
typedef struct _ReportAttributeRecord
{
    chip::AttributeId attributeId;
    uint8_t attributeType;
    uint8_t * attributeLocation;
} EmberAfReportAttributeRecord;

// Struct for RouteTable
typedef struct _RouteTable
{
    uint64_t ExtAddress;
    uint16_t Rloc16;
    uint8_t RouterId;
    uint8_t NextHop;
    uint8_t PathCost;
    uint8_t LQIIn;
    uint8_t LQIOut;
    uint8_t Age;
    uint8_t Allocated;
    uint8_t LinkEstablished;
} EmberAfRouteTable;

// Struct for SceneExtensionAttributeInfo
typedef struct _SceneExtensionAttributeInfo
{
    uint8_t attributeType;
    uint8_t * attributeLocation;
} EmberAfSceneExtensionAttributeInfo;

// Struct for SceneExtensionFieldSet
typedef struct _SceneExtensionFieldSet
{
    chip::ClusterId clusterId;
    uint8_t length;
    uint8_t value;
} EmberAfSceneExtensionFieldSet;

// Struct for ScheduledPhase
typedef struct _ScheduledPhase
{
    uint8_t energyPhaseId;
    uint16_t scheduledTime;
} EmberAfScheduledPhase;

// Struct for SecurityPolicy
typedef struct _SecurityPolicy
{
    uint16_t RotationTime;
    uint8_t Flags;
} EmberAfSecurityPolicy;

// Struct for TestListStructOctet
typedef struct _TestListStructOctet
{
    uint64_t fabricIndex;
    chip::ByteSpan operationalCert;
} EmberAfTestListStructOctet;

// Struct for ThreadInterfaceScanResult
typedef struct _ThreadInterfaceScanResult
{
    chip::ByteSpan DiscoveryResponse;
} EmberAfThreadInterfaceScanResult;

// Struct for ThreadMetrics
typedef struct _ThreadMetrics
{
    uint64_t Id;
    chip::ByteSpan Name;
    uint32_t StackFreeCurrent;
    uint32_t StackFreeMinimum;
    uint32_t StackSize;
} EmberAfThreadMetrics;

// Struct for TransferredPhase
typedef struct _TransferredPhase
{
    uint8_t energyPhaseId;
    uint8_t macroPhaseId;
    uint16_t expectedDuration;
    uint16_t peakPower;
    uint16_t energy;
    uint16_t maxActivationDelay;
} EmberAfTransferredPhase;

// Struct for TvChannelInfo
typedef struct _TvChannelInfo
{
    uint16_t majorNumber;
    uint16_t minorNumber;
    chip::ByteSpan name;
    chip::ByteSpan callSign;
    chip::ByteSpan affiliateCallSign;
} EmberAfTvChannelInfo;

// Struct for TvChannelLineupInfo
typedef struct _TvChannelLineupInfo
{
    uint8_t * operatorName;
    uint8_t * lineupName;
    uint8_t * postalCode;
    uint8_t lineupInfoType;
} EmberAfTvChannelLineupInfo;

// Struct for WiFiInterfaceScanResult
typedef struct _WiFiInterfaceScanResult
{
    uint8_t Security;
    chip::ByteSpan SSID;
    chip::ByteSpan BSSID;
    uint8_t Channel;
    uint32_t FrequencyBand;
} EmberAfWiFiInterfaceScanResult;

// Struct for WriteAttributeRecord
typedef struct _WriteAttributeRecord
{
    chip::AttributeId attributeId;
    uint8_t attributeType;
    uint8_t * attributeLocation;
} EmberAfWriteAttributeRecord;

// Struct for WriteAttributeStatusRecord
typedef struct _WriteAttributeStatusRecord
{
    uint8_t status;
    chip::AttributeId attributeId;
} EmberAfWriteAttributeStatusRecord;

// Struct for WriteStructuredAttributeRecord
typedef struct _WriteStructuredAttributeRecord
{
    chip::AttributeId attributeId;
    uint8_t indicator;
    uint16_t indicies;
    uint8_t attributeType;
    uint8_t * attributeLocation;
} EmberAfWriteStructuredAttributeRecord;

// Struct for WriteStructuredAttributeStatusRecord
typedef struct _WriteStructuredAttributeStatusRecord
{
    uint8_t status;
    chip::AttributeId attributeId;
    uint8_t indicator;
    uint16_t indicies;
} EmberAfWriteStructuredAttributeStatusRecord;
